﻿using System;
using System.Collections.Generic;
using System.Text;
using App.Modelo;
using App.Modelo.Interfaces;
using System.Data;
using App.Persistencia;
using NHibernate;
namespace App.Controlador
{

    internal class FabricaControladoras : IControladoraFactory
    {
        public ISessionActual Session;

        public T Factory<T>() where T : IControladora, new()
        {
            var controladora = new T
            {
                Repositorio = new Repositorio(),
                Session = Session
            };
            return controladora;
        }
    }

    public class ControladoraFacade:IDisposable
    {
        Dictionary<string, ControladoraAbstracta> Controladoras;

        internal readonly FabricaControladoras FabricaControladoras = new FabricaControladoras();

        public ISession Session
        {
            get;
            set;
        }
        

        private ControladoraUsuarios _Seguridad;
        private ControladoraEquipos _Equipos;
        private ControladoraModeloEquipos _ModelosEquipo;
        private ControladoraTecnicos _Tecnicos;
        private ControladoraGrupos _Grupos;
        private ControladoraPerfiles _Perfiles;
        private ControladoraMarcas _Marcas;
        private ControladoraReparaciones _Reparaciones;
        private ControladoraClientes _Clientes;
        private ControladoraPiezas _ControladoraPiezas;

        private Usuario _UsuarioActual;
        public Usuario UsuarioActual
        {
            get
            {
                return _UsuarioActual;
            }
            set
            {
                _UsuarioActual = value;
            }
        }
        

        public ControladoraUsuarios Usuarios
        {
            get
            {
                if (_Seguridad == null)
                    _Seguridad = FabricaControladoras.Factory<ControladoraUsuarios>();
                return _Seguridad;
            }
        }

        public ControladoraGrupos Grupos
        {
            get
            {
                if (_Grupos == null)
                    _Grupos = FabricaControladoras.Factory<ControladoraGrupos>();
                return _Grupos;
            }
        }

        public ControladoraPerfiles Perfiles
        {
            get
            {
                if (_Perfiles == null)
                    _Perfiles = FabricaControladoras.Factory<ControladoraPerfiles>();
                return _Perfiles;
            }
        }

        public ControladoraMarcas Marcas
        {
            get
            {
                if (_Marcas == null)
                    _Marcas = FabricaControladoras.Factory<ControladoraMarcas>();
                return _Marcas;
            }
        }

        public ControladoraReparaciones Reparaciones
        {
            get
            {
                if (_Reparaciones == null)
                    _Reparaciones = FabricaControladoras.Factory<ControladoraReparaciones>();

                return _Reparaciones;
            }
        }

        public ControladoraClientes Clientes
        {
            get
            {
                if (_Clientes == null)
                    _Clientes = FabricaControladoras.Factory<ControladoraClientes>();
                return _Clientes;
            }
        }

        public ControladoraEquipos Equipos
        {
            get
            {
                if (_Equipos == null)
                    _Equipos = FabricaControladoras.Factory<ControladoraEquipos>();
                return _Equipos;
            }
        }

        public ControladoraModeloEquipos ModelosEquipo
        {
            get
            {
                if (_ModelosEquipo == null)
                    _ModelosEquipo = FabricaControladoras.Factory<ControladoraModeloEquipos>();
                return _ModelosEquipo;
            }
        }

        public ControladoraTecnicos Tecnicos
        {
            get
            {
                if (_Tecnicos == null)
                    _Tecnicos = FabricaControladoras.Factory<ControladoraTecnicos>();
                return _Tecnicos;
            }
        }

        public ControladoraPiezas Piezas
        {
            get
            {
                if (_ControladoraPiezas == null)
                    _ControladoraPiezas = FabricaControladoras.Factory<ControladoraPiezas>();

                
                return _ControladoraPiezas;
            }
        }

        


        
        #region IDisposable Members

        public void Dispose() { }

        #endregion
    }
}
